Abstract
En este laboratorio usaremos información del Libro de Ordenes de Criptomonedas de diversos exchanges internacionales, con el objetivo primario de visualizar y modelar la microestructura del mercado por medio del comportamiento de Libro de Ordenes y sus caracteristicas como; Matching Engine, Levels, Ask-Bid Volumnes, etc.
Este laboratorio nos ayudará con una introducción práctica al análisis de libros de órdenes de criptomonedas y cómo se pueden utilizar para comprender mejor la microestructura del mercado. Al hacerlo, esperamos proporcionar a los participantes las habilidades y herramientas necesarias para realizar análisis de mercado efectivos y tomar decisiones informadas sobre sus operaciones.
Después de obtener la información de los libros de órdenes, se procedió a la visualización de la microestructura del mercado. Se utilizaron herramientas de visualización de datos para representar la información de manera clara y concisa. Además, se exploraron las relaciones y tendencias entre las diferentes variables que se obtuvieron de los libros de órdenes utilizando técnicas estadísticas y de aprendizaje automático.
Es importante destacar que este proyecto se centró en la obtención de información de tres mercados de intercambio diferentes y dos pares de negociación diferentes BTC/USDT y ETH/USDT. Sin embargo, estas técnicas de análisis de libros de órdenes se pueden aplicar a cualquier mercado de intercambio y cualquier par de negociación. Esto significa que las habilidades y herramientas adquiridas en este proyecto pueden ser aplicadas a diferentes situaciones y mercados.
Este proyecto es la visualización de microestructuras de mercado utilizando los libros de órdenes de los exchanges. Para lograr este objetivo, se recopilarán los datos relevantes de los libros de órdenes, lo que incluirá los niveles de los precios, el volumen de las ofertas de compra (bid volume), el volumen de las ofertas de venta (ask volume), el precio medio (mid price) y el precio promedio ponderado por volumen (VWAP).
# importar librerias
import pandas as pd
import numpy as np
import importlib
import asyncio
import nest_asyncio
nest_asyncio.apply()
import time
import files
import datetime
from functions import roll_spread_df
import warnings
warnings.filterwarnings("ignore")
import main
importlib.reload(main)
<module 'main' from 'C:\\Users\\jpgz3\\OneDrive - ITESO\\9 semestre\\MySt\\Laboratorio-4--Microestructura-del-mercado-2\\main.py'>
Time 28.1508 / 30
# Por el momento se encuentra asi por que no puedo leer los json de una hora
#exchanges = ["bitforex", "huobipro", "bitmart"]
#run_time = 10
#symbol = "ETH/BTC"
#ETH_BTC = asyncio.run(main.get_orderbooks(exchanges,run_time,symbol))
# Leo los archivos temporales de BTC/USDT
BCT_USDT = pd.read_excel(r'files/BTCUSDT.xlsx')
RequestTimeout huobipro GET https://api.huobi.pro/v2/reference/currencies RequestTimeout bitmart GET https://api-cloud.bitmart.com/spot/v1/currencies
BCT_USDT = BCT_USDT.drop(["Unnamed: 0"],axis=1)
BCT_USDT_v = BCT_USDT.drop(['ask', 'bid', 'spread'],axis=1)
BCT_USDT_v["total_vol"] = BCT_USDT_v.ask_size + BCT_USDT_v.bid_size
BCT_USDT_v.columns = ['exchange','timeStamp','ask_Volume','bid_Volume','Mid_Price','VWAP','Level','total_vol']
BCT_USDT_v.head()
| exchange | timeStamp | ask_Volume | bid_Volume | Mid_Price | VWAP | Level | total_vol | |
|---|---|---|---|---|---|---|---|---|
| 0 | bigone | 2023-04-25T03:20:29.631Z | 14.547764 | 8.440486 | 27417.855 | 27470.6607 | 50 | 22.98825 |
| 1 | bigone | 2023-04-25T03:20:31.015Z | 14.547764 | 8.440486 | 27417.855 | 27470.6618 | 50 | 22.98825 |
| 2 | bigone | 2023-04-25T03:20:32.410Z | 14.547764 | 8.440486 | 27417.855 | 27470.6640 | 50 | 22.98825 |
| 3 | bigone | 2023-04-25T03:20:33.798Z | 14.547764 | 8.440486 | 27417.855 | 27470.6651 | 50 | 22.98825 |
| 4 | bigone | 2023-04-25T03:20:35.190Z | 14.547764 | 8.440486 | 27417.855 | 27470.6662 | 50 | 22.98825 |
#exchanges = ["bitforex", "huobipro", "bitmart"]
#run_time = 10
#symbol2 = "BTC/USDT"
#BTC_USDT = asyncio.run(main.get_orderbooks(exchanges,run_time,symbol2))
# Debido a que muestra errores que no puedo solucionar de aqui se corre hasta que salga
ETH_USDT = pd.read_excel(r'files/ETHUSDT.xlsx')
ETH_USDT = ETH_USDT.drop(["Unnamed: 0"],axis=1)
ETH_USDT_v = ETH_USDT.drop(['ask', 'bid', 'spread'],axis=1)
ETH_USDT_v["total_vol"] = ETH_USDT.ask_size + ETH_USDT.bid_size
ETH_USDT_v.columns = ['exchange','timeStamp','ask_Volume','bid_Volume','Mid_Price','VWAP','Level','total_vol']
ETH_USDT_v.head()
| exchange | timeStamp | ask_Volume | bid_Volume | Mid_Price | VWAP | Level | total_vol | |
|---|---|---|---|---|---|---|---|---|
| 0 | bigone | 2023-04-25T05:17:02.051Z | 995.76417 | 340.63289 | 1823.05 | 1840.4621 | 50 | 1336.39706 |
| 1 | bigone | 2023-04-25T05:17:03.416Z | 995.76417 | 340.63289 | 1823.05 | 1840.4621 | 50 | 1336.39706 |
| 2 | bigone | 2023-04-25T05:17:04.784Z | 995.76417 | 340.63289 | 1823.05 | 1840.4621 | 50 | 1336.39706 |
| 3 | bigone | 2023-04-25T05:17:06.156Z | 995.76417 | 340.63289 | 1823.05 | 1840.4621 | 50 | 1336.39706 |
| 4 | bigone | 2023-04-25T05:17:07.515Z | 995.76417 | 340.63289 | 1823.05 | 1840.4621 | 50 | 1336.39706 |
dataETH = pd.read_excel("./files/ETHUSDT.xlsx")
dataETH["datetime"] = pd.to_datetime(dataETH["datetime"].str.replace("Z", ""))
roll_spread = roll_spread_df(dataETH)
roll_spread.tail()
| mid_price | spread | effective_spread | |
|---|---|---|---|
| datetime | |||
| 2023-04-25 06:16:50.378 | 1829.755 | 0.25 | 0.496050 |
| 2023-04-25 06:16:52.736 | 1829.755 | 0.25 | 0.513535 |
| 2023-04-25 06:16:55.009 | 1829.755 | 0.25 | 0.530203 |
| 2023-04-25 06:16:57.313 | 1829.755 | 0.25 | 0.546127 |
| 2023-04-25 06:16:59.682 | 1829.755 | 0.25 | 0.561370 |
dataBTC = pd.read_excel("./files/BTCUSDT.xlsx")
dataBTC["datetime"] = pd.to_datetime(dataBTC["datetime"].str.replace("Z", ""))
roll_spread = roll_spread_df(dataBTC)
roll_spread.tail()
| mid_price | spread | effective_spread | |
|---|---|---|---|
| datetime | |||
| 2023-04-25 04:20:19.165 | 27382.0 | 38176.0 | 7.161363 |
| 2023-04-25 04:20:21.300 | 27383.0 | 38652.0 | 7.100812 |
| 2023-04-25 04:20:23.447 | 27384.0 | 35772.0 | 6.995239 |
| 2023-04-25 04:20:25.576 | 27385.0 | 35158.0 | 6.859773 |
| 2023-04-25 04:20:27.714 | 27386.0 | 35779.0 | 6.712650 |
import visualizations
import nbformat
importlib.reload(visualizations)
<module 'visualizations' from 'C:\\Users\\jpgz3\\OneDrive - ITESO\\9 semestre\\MySt\\Laboratorio-4--Microestructura-del-mercado-2\\visualizations.py'>
visualizations.graficas(ETH_USDT_v,'ETH/BTC')
# En VSCODE no sale los graficos pero un jupyter notebook si funcionan
visualizations.graficas(BCT_USDT_v,'BCT/USDT')
El análisis de microestructuras es una técnica que se ha convertido en una herramienta valiosa para los inversores y traders en los mercados financieros modernos. Esta herramienta ayuda a obtener información detallada sobre el comportamiento del mercado y las fuerzas que lo impulsan. El análisis de microestructuras se enfoca en la estructura interna del mercado, es decir, cómo los participantes del mercado interactúan entre sí a través de las órdenes de compra y venta. A través de este análisis, los inversores pueden identificar patrones de comportamiento del mercado, como la presencia de liquidez, volatilidad y efectos de retroceso.
Durante la sesión de laboratorio, obtuvimos información sobre cómo funciona el mercado y la relación entre las ofertas y las demandas, la cual tuvimos problemas porque salía un número muy alto. Comprender esta relación nos permitió analizar los cambios en los precios y los spreads, y hacer predicciones sobre el mercado. Sin embargo, el bajo volumen y la falta de movimiento en el mercado de intercambio crearon algunos desafíos para obtener resultados concluyentes con respecto al spread.
Todos estos conocimientos pueden ayudar a los inversores a ajustar sus estrategias de inversión y minimizar el riesgo al tomar decisiones. Al aprovechar el análisis de microestructuras, los inversionistas pueden mejorar el rendimiento de su cartera de inversión.